Application initiated conversations for chatbots

ABSTRACT

Techniques for described for invoking a chatbot in a chatbot system, in response to an event notification from a software application. The event notification can be sent to the chatbot system based on the software application determining that one or more conditions associated with an event are satisfied. In certain embodiments, the event notification contains information indicating a dialog flow state for starting a new conversation between a particular chatbot and a user. The event notification can also identify the user and/or the particular chatbot. In some instances, a prompt is output to the user requesting the user to confirm a start of the new conversation. Whether the prompt is output or not can depend on whether there is an existing conversation between the user and a chatbot in the chatbot system.

CROSS-REFERENCES TO RELATED APPLICATIONS

The present application is a continuation of and claims priority to U.S.application Ser. No. 16/857,766, filed Apr. 24, 2020, entitled“APPLICATION INITIATED CONVERSATIONS FOR CHATBOTS,” which claims thebenefit of and priority under 35 U.S.C. 119(e) to U.S. ProvisionalApplication No. 62/839,582, filed Apr. 26, 2019, entitled “APPLICATIONINITIATED CONVERSATIONS FOR CHATBOTS.” The contents of both applicationsare incorporated herein by reference in their entirety for all purposes.

BACKGROUND

Chatbots provide an interface for conversations with human users.Chatbots can be configured to perform various tasks in response to userinput provided during a conversation. The user input can be supplied invarious forms including, for example, audio input and text input. Thus,natural language understanding (NLU), speech-to-text, and otherlinguistic processing techniques may be employed as part of theprocessing performed by a chatbot. In some computing environments,multiple chatbots are available for conversing with a user, with eachchatbot handling a different set of tasks.

A conversation between a user and a chatbot is typically initiated inresponse to input from the user, for example, a text message sent fromthe user to the chatbot. The conversation is usually initiated when theuser decides that they need the chatbot's assistance in performing sometask. Thus, the user decides when to begin interacting with the chatbot.

SUMMARY

The present disclosure relates generally to initiating conversationswith chatbots. More particularly, techniques are described for invokingchatbots based on events generated by software applications. In certainembodiments, chatbot conversations can be initiated in different ways,including through direct user interaction with a chatbot system. Inaddition to user-initiated conversations, certain embodiments describedherein provide for automated initiation of a conversation based on anevent generated by a software application in response to the softwareapplication determining that one or more conditions associated with theevent are satisfied. A chatbot system can be informed about the eventthrough an electronic notification (e.g., a digital message) sent fromthe software application. In certain embodiments, the notificationincludes information identifying a particular user, informationidentifying a particular chatbot, information indicating a startingstate for a conversation, or a combination thereof.

In certain embodiments, a method performed by a computer-implementedchatbot system involves receiving, by the chatbot system, an eventnotification from a software application, where the event notificationis generated based on the software application determining that one ormore conditions associated with an event are satisfied. The methodfurther involves determining, by the chatbot system and based oninformation contained in the event notification, a dialog flow state forstarting a new conversation between a first chatbot in the chatbotsystem and a user. The method further involves determining, by thechatbot system, whether to output to the user a prompt requesting theuser to confirm a start of the new conversation. Determining whether tooutput the prompt can include determining whether there is an existingconversation between the user and a chatbot in the chatbot system. Themethod further involves starting, by the chatbot system, the newconversation in the determined dialog flow state.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a simplified block diagram of an environment incorporating achatbot system according to certain embodiments.

FIG. 2 is a simplified block diagram of an environment incorporating achatbot system configured to handle application-initiated conversationsaccording to certain embodiments.

FIG. 3 is simplified flowchart depicting a process for configuring achatbot system to handle application-initiated conversations accordingto certain embodiments.

FIG. 4A illustrates an example event notification according to certainembodiments.

FIG. 4B illustrates an example of a dialog flow state that can beconfigured for an event according to certain embodiments.

FIG. 5 is simplified flowchart depicting a process for initiating aconversation based on an event notification according to certainembodiments.

FIG. 6 is a simplified diagram of a distributed system for implementingone or more embodiments.

FIG. 7 is a simplified block diagram of a cloud-based system environmentin which various application-initiated-conversation-related services maybe offered as cloud services, in accordance with certain embodiments.

FIG. 8 illustrates an exemplary computer system that may be used toimplement certain embodiments.

DETAILED DESCRIPTION

In the following description, for the purposes of explanation, specificdetails are set forth in order to provide a thorough understanding ofcertain inventive embodiments. However, it will be apparent that variousembodiments may be practiced without these specific details. The figuresand description are not intended to be restrictive. The word “exemplary”is used herein to mean “serving as an example, instance, orillustration.” Any embodiment or design described herein as “exemplary”is not necessarily to be construed as preferred or advantageous overother embodiments or designs.

The present disclosure relates generally to initiating conversationswith chatbots. More particularly, techniques are described for invokingchatbots based on events generated by software applications. In certainembodiments, chatbot conversations can be initiated in different ways,including through direct user interaction with a chatbot system. Inaddition to user-initiated conversations, certain embodiments describedherein provide for automated initiation of a conversation based on anevent generated by a software application in response to the softwareapplication determining that one or more conditions associated with theevent are satisfied. A chatbot system can be informed about the eventthrough an electronic notification (e.g., a digital message) sent fromthe software application. In certain embodiments, the notificationincludes information identifying a particular user, informationidentifying a particular chatbot, information indicating a startingstate for a conversation, or a combination thereof.

Chatbot System Overview (Example)

FIG. 1 is a simplified block diagram of an environment 100 incorporatinga chatbot system according to certain embodiments. Environment 100comprises a digital assistant builder platform (DABP) 102 that enablesusers of DABP 102 to create and deploy digital assistants or chatbotsystems. DABP 102 can be used to create one or more digital assistants(DAs) or chatbot systems. For example, as shown in FIG. 1, user 104representing a particular enterprise can use DABP 102 to create anddeploy a digital assistant 106 for users of the particular enterprise.For example, DABP 102 can be used by a bank to create one or moredigital assistants for use by the bank's customers. The same DABP 102platform can be used by multiple enterprises to create digitalassistants. As another example, an owner of a restaurant (e.g., a pizzashop) may use DABP 102 to create and deploy a digital assistant thatenables customers of the restaurant to order food (e.g., order pizza).

For purposes of this disclosure, a “digital assistant” is an entity thathelps users of the digital assistant accomplish various tasks throughnatural language conversations. A digital assistant can be implementedusing software only (e.g., the digital assistant is a digital entityimplemented using programs, code, or instructions executable by one ormore processors), using hardware, or using a combination of hardware andsoftware. A digital assistant can be embodied or implemented in variousphysical systems or devices, such as in a computer, a mobile phone, awatch, an appliance, a vehicle, and the like. A digital assistant isalso sometimes referred to as a chatbot system. Accordingly, forpurposes of this disclosure, the terms digital assistant and chatbotsystem are interchangeable.

A digital assistant, such as digital assistant 106 built using DABP 102,can be used to perform various tasks via natural language-basedconversations between the digital assistant and its users 108. As partof a conversation, a user may provide one or more user inputs 110 todigital assistant 106 and get responses 112 back from digital assistant106. A conversation can include one or more of inputs 110 and responses112. Via these conversations, a user can request one or more tasks to beperformed by the digital assistant and, in response, the digitalassistant is configured to perform the user-requested tasks and respondwith appropriate responses to the user.

User inputs 110 are generally in a natural language form and arereferred to as utterances. A user utterance 110 can be in text form,such as when a user types in a sentence, a question, a text fragment, oreven a single word and provides the text as input to digital assistant106. In some embodiments, a user utterance 110 can be in audio input orspeech form, such as when a user says or speaks something that isprovided as input to digital assistant 106. The utterances are typicallyin a language spoken by the user 108. When an utterance is in speechform, the speech input is converted to text form utterances in thatparticular language and the text utterances are then processed bydigital assistant 106. Various speech-to-text processing techniques maybe used to convert a speech or audio input to a text utterance, which isthen processed by digital assistant 106. In some embodiments, thespeech-to-text conversion may be done by digital assistant 106 itself.

An utterance, which may be a text utterance or a speech utterance, canbe a fragment, a sentence, multiple sentences, one or more words, one ormore questions, combinations of the aforementioned types, and the like.Digital assistant 106 is configured to apply natural languageunderstanding (NLU) techniques to the utterance to understand themeaning of the user input. As part of the NLU processing for anutterance, digital assistant 106 is configured to perform processing tounderstand the meaning of the utterance, which involves identifying oneor more intents and one or more entities corresponding to the utterance.Upon understanding the meaning of an utterance, digital assistant 106may perform one or more actions or operations responsive to theunderstood meaning or intents. For purposes of this disclosure, it isassumed that the utterances are text utterances that have been provideddirectly by a user 108 of digital assistant 106 or are the results ofconversion of input speech utterances to text form. This however is notintended to be limiting or restrictive in any manner.

For example, a user 108 input may request a pizza to be ordered byproviding an utterance such as “I want to order a pizza.” Upon receivingsuch an utterance, digital assistant 106 is configured to understand themeaning of the utterance and take appropriate actions. The appropriateactions may involve, for example, responding to the user with questionsrequesting user input on the type of pizza the user desires to order,the size of the pizza, any toppings for the pizza, and the like. Theresponses provided by digital assistant 106 may also be in naturallanguage form and typically in the same language as the input utterance.As part of generating these responses, digital assistant 106 may performnatural language generation (NLG). For the user ordering a pizza, viathe conversation between the user and digital assistant 106, the digitalassistant may guide the user to provide all the requisite informationfor the pizza order, and then at the end of the conversation cause thepizza to be ordered. Digital assistant 106 may end the conversation byoutputting information to the user indicating that the pizza has beenordered.

At a conceptual level, digital assistant 106 performs various processingin response to an utterance received from a user. In some embodiments,this processing involves a series or pipeline of processing stepsincluding, for example, understanding the meaning of the input utterance(using NLU), determining an action to be performed in response to theutterance, where appropriate causing the action to be performed,generating a response to be output to the user responsive to the userutterance, outputting the response to the user, and the like. The NLUprocessing can include parsing the received input utterance tounderstand the structure and meaning of the utterance, refining andreforming the utterance to develop a better understandable form (e.g.,logical form) or structure for the utterance. Generating a response mayinclude using natural language generation (NLG) techniques. Thus, thenatural language processing (NLP) performed by a digital assistant caninclude a combination of NLU and NLG processing.

The NLU processing performed by a digital assistant, such as digitalassistant 106, can include various NLU related processing such assentence parsing (e.g., tokenizing, lemmatizing, identifyingpart-of-speech tags for the sentence, identifying named entities in thesentence, generating dependency trees to represent the sentencestructure, splitting a sentence into clauses, analyzing individualclauses, resolving anaphoras, performing chunking, and the like). Incertain embodiments, the NLU processing or portions thereof is performedby digital assistant 106 itself. In some other embodiments, digitalassistant 106 may use other resources to perform portions of the NLUprocessing. For example, the syntax and structure of an input utterancesentence may be identified by processing the sentence using a parser, apart-of-speech tagger, and/or a named entity recognizer. In oneimplementation, for the English language, a parser, a part-of-speechtagger, and a named entity recognizer such as ones provided by theStanford NLP Group are used for analyzing the sentence structure andsyntax. These are provided as part of the Stanford CoreNLP toolkit.

While the various examples provided in this disclosure show utterancesin the English language, this is meant only as an example. In certainembodiments, digital assistant 106 is also capable of handlingutterances in languages other than English. Digital assistant 106 mayprovide subsystems (e.g., components implementing NLU functionality)that are configured for performing processing for different languages.These subsystems may be implemented as pluggable units that can becalled using service calls from an NLU core server. This makes the NLUprocessing flexible and extensible for each language, including allowingdifferent orders of processing. A language pack may be provided forindividual languages, where a language pack can register a list ofsubsystems that can be served from the NLU core server.

A digital assistant, such as digital assistant 106 depicted in FIG. 1,can be made available or accessible to its users 108 through a varietyof different channels, such as but not limited to, via certainapplications, via social media platforms, via various messaging servicesand applications (e.g., an instant messaging application), and otherapplications or channels. A single digital assistant can have severalchannels configured for it so that it can be run on and be accessed bydifferent services simultaneously.

A digital assistant or chatbot system generally contains or isassociated with one or more skills. In certain embodiments, these skillsare individual chatbots (referred to as skill bots) that are configuredto interact with users and fulfill specific types of tasks, such astracking inventory, submitting timecards, creating expense reports,ordering food, checking a bank account, making reservations, buying awidget, and the like. For example, for the embodiment depicted in FIG.1, digital assistant or chatbot system 106 includes skills 116-1, 116-2,and so on. For purposes of this disclosure, the terms “skill” and“skills” are used synonymously with the terms “skill bot” and “skillbots,” respectively.

Each skill associated with a digital assistant helps a user of thedigital assistant complete a task through a conversation with the user,where the conversation can include a combination of text or audio inputsprovided by the user and responses provided by the skill bots. Theseresponses may be in the form of text or audio messages to the userand/or provided using simple user interface elements (e.g., selectlists) that are presented to the user for the user to make selections.

There are various ways in which a skill or skill bot can be associatedor added to a digital assistant. In some instances, a skill bot can bedeveloped by an enterprise and then added to a digital assistant usingDABP 102, e.g., through a user interface provided by DABP 102 forregistering the skill bot with the digital assistant. In otherinstances, a skill bot can be developed and created using DABP 102 andthen added to a digital assistant created using DABP 102. In yet otherinstances, DABP 102 provides an online digital store (referred to as a“skills store”) that offers multiple skills directed to a wide range oftasks. The skills offered through the skills store may also exposevarious cloud services. In order to add a skill to a digital assistantbeing generated using DABP 102, a user of DABP 102 can access the skillsstore via DABP 102, select a desired skill, and indicate that theselected skill is to be added to the digital assistant created usingDABP 102. A skill from the skills store can be added to a digitalassistant as is or in a modified form (for example, a user of DABP 102may select and clone a particular skill bot provided by the skillsstore, make customizations or modifications to the selected skill bot,and then add the modified skill bot to a digital assistant created usingDABP 102).

Various different architectures may be used to implement a digitalassistant or chatbot system. For example, in certain embodiments, thedigital assistants created and deployed using DABP 102 may beimplemented using a master bot/child(or sub) bot paradigm orarchitecture. According to this paradigm, a digital assistant isimplemented as a master bot that interacts with one or more child botsthat are skill bots. For example, in the embodiment depicted in FIG. 1,digital assistant 106 comprises a master bot 114 and skill bots 116-1,116-2, etc. that are child bots of master bot 114. In certainembodiments, digital assistant 106 is itself considered to act as themaster bot.

A digital assistant implemented according to the master-child botarchitecture enables users of the digital assistant to interact withmultiple skills through a unified user interface, namely via the masterbot. When a user engages with a digital assistant, the user input isreceived by the master bot. The master bot then performs processing todetermine the meaning of the user input utterance. The master bot thendetermines whether the task requested by the user in the utterance canbe handled by the master bot itself, else the master bot selects anappropriate skill bot for handling the user request and routes theconversation to the selected skill bot. This enables a user to conversewith the digital assistant through a common single interface and stillprovide the capability to use several skill bots configured to performspecific tasks. For example, for a digital assistant developed for anenterprise, the master bot of the digital assistant may interface withskill bots with specific functionalities, such as a CRM bot forperforming functions related to customer relationship management (CRM),an ERP bot for performing functions related to enterprise resourceplanning (ERP), an HCM bot for performing functions related to humancapital management (HCM), etc. This way the end user or consumer of thedigital assistant need only know how to access the digital assistantthrough the common master bot interface and behind the scenes multipleskill bots are provided for handling the user request.

In certain embodiments, in a master bot/child bots infrastructure, themaster bot is configured to be aware of the available list of skillbots. The master bot may have access to metadata that identifies thevarious available skill bots, and for each skill bot, the capabilitiesof the skill bot including the tasks that can be performed by the skillbot. Upon receiving a user request in the form of an utterance, themaster bot is configured to, from the multiple available skill bots,identify or predict a specific skill bot that can best serve or handlethe user request. The master bot then routes the utterance (or a portionof the utterance) to that specific skill bot for further handling.Control thus flows from the master bot to the skill bots. The master botcan support multiple input and output channels. In certain embodiments,routing may be performed with the aid of processing performed by one ormore available skill bots. For example, as discussed below, a skill botcan be trained to infer an intent for an utterance and to determinewhether the inferred intent matches an intent with which the skill botis configured. Thus, the routing performed by the master bot can involvethe skill bot communicating to the master bot an indication of whetherthe skill bot has been configured with an intent suitable for handlingthe utterance.

While the embodiment in FIG. 1 shows digital assistant 106 comprising amaster bot 114 and skill bots 116-1, 116-2, and 116-3, this is notintended to be limiting. A digital assistant can include various othercomponents (e.g., other systems and subsystems) that provide thefunctionalities of the digital assistant. These systems and subsystemsmay be implemented only in software (e.g., code, instructions stored ona computer-readable medium and executable by one or more processors), inhardware only, or in implementations that use a combination of softwareand hardware.

DABP 102 provides an infrastructure and various services and featuresthat enable a user of DABP 102 to create a digital assistant includingone or more skill bots associated with the digital assistant. In someinstances, a skill bot can be created by cloning an existing skill bot,for example, cloning a skill bot provided by the skills store. Aspreviously indicated, DABP 102 can provide a skills store or skillscatalog that offers multiple skill bots for performing various tasks. Auser of DABP 102 can clone a skill bot from the skills store. As needed,modifications or customizations may be made to the cloned skill bot. Insome other instances, a user of DABP 102 creates a skill bot fromscratch using tools and services offered by DABP 102.

In certain embodiments, at a high level, creating or customizing a skillbot involves the following steps:

-   -   (1) Configuring settings for a new skill bot    -   (2) Configuring one or more intents for the skill bot    -   (3) Configuring one or more entities for one or more intents    -   (4) Training the skill bot    -   (5) Creating a dialog flow for the skill bot    -   (6) Adding custom components to the skill bot as needed    -   (7) Testing and deploying the skill bot        Each of the above steps is briefly described below.

(1) Configuring settings for a new skill bot—Various settings may beconfigured for the skill bot. For example, a skill bot designer canspecify one or more invocation names for the skill bot being created.These invocation names, which serve as identifiers for the skill bot,can then be used by users of a digital assistant to explicitly invokethe skill bot. For example, a user can include an invocation name in theuser's utterance to explicitly invoke the corresponding skill bot.

(2) Configuring one or more intents and associated example utterancesfor the skill bot—The skill bot designer specifies one or more intents(also referred to as bot intents) for a skill bot being created. Theskill bot is then trained based upon these specified intents. Theseintents represent categories or classes that the skill bot is trained toinfer for input utterances. Upon receiving an utterance, a trained skillbot infers an intent for the utterance, where the inferred intent isselected from the predefined set of intents used to train the skill bot.The skill bot then takes an appropriate action responsive to anutterance based upon the intent inferred for that utterance. In someinstances, the intents for a skill bot represent tasks that the skillbot can perform for users of the digital assistant. Each intent is givenan intent identifier or intent name. For example, for a skill bottrained for a bank, the intents specified for the skill bot may include“CheckBalance,” “TransferMoney,” “DepositCheck,” and the like.

For each intent defined for a skill bot, the skill bot designer may alsoprovide one or more example utterances that are representative of andillustrate the intent. These example utterances are meant to representutterances that a user may input to the skill bot for that intent. Forexample, for the CheckBalance intent, example utterances may include“What's my savings account balance?”, “How much is in my checkingaccount?”, “How much money do I have in my account,” and the like.Accordingly, various permutations of typical user utterances may bespecified as example utterances for an intent.

The intents and their associated example utterances are used as trainingdata to train the skill bot. Various different training techniques maybe used. As a result of this training, a predictive model is generatedthat is configured to take an utterance as input and output an intentinferred for the utterance. In some instances, input utterances areprovided to an intent analysis engine (e.g., a rules-based ormachine-learning based classifier executed by the skill bot), which isconfigured to use the trained model to predict or infer an intent forthe input utterance. The skill bot may then take one or more actionsbased upon the inferred intent.

(3) Configuring entities for one or more intents of the skill bot—Insome instances, additional context may be needed to enable the skill botto properly respond to a user utterance. For example, there may besituations where a user input utterance resolves to the same intent in askill bot. For instance, in the above example, utterances “What's mysavings account balance?” and “How much is in my checking account?” bothresolve to the same CheckBalance intent, but these utterances aredifferent requests asking for different things. To clarify suchrequests, one or more entities can be added to an intent. Using thebanking skill bot example, an entity called AccountType, which definesvalues called “checking” and “saving” may enable the skill bot to parsethe user request and respond appropriately. In the above example, whilethe utterances resolve to the same intent, the value associated with theAccountType entity is different for the two utterances. This enables theskill bot to perform possibly different actions for the two utterancesin spite of them resolving to the same intent. One or more entities canbe specified for certain intents configured for the skill bot. Entitiesare thus used to add context to the intent itself. Entities helpdescribe an intent more fully and enable the skill bot to complete auser request.

In certain embodiments, there are two types of entities: (a) built-inentities provided by DABP 102, and (2) custom entities that can bespecified by a skill bot designer. Built-in entities are genericentities that can be used with a wide variety of bots. Examples ofbuilt-in entities include, without limitation, entities related to time,date, addresses, numbers, email addresses, duration, recurring timeperiods, currencies, phone numbers, URLs (Uniform Resource Locators),and the like. Custom entities are used for more customized applications.For example, for a banking skill, an AccountType entity may be definedby the skill bot designer that enables various banking transactions bychecking the user input for keywords like checking, savings, and creditcards, etc.

(4) Training the skill bot—A skill bot is configured to receive userinput in the form of utterances, parse or otherwise process the receivedinput, and identify or select an intent that is relevant to the receiveduser input. As indicated above, the skill bot has to be trained forthis. In certain embodiments, a skill bot is trained based upon theintents configured for the skill bot and the example utterancesassociated with the intents (collectively, the training data), so thatthe skill bot can resolve user input utterances to one of its configuredintents. In certain embodiments, the skill bot uses a predictive modelthat is trained using the training data and allows the skill bot todiscern what users say (or in some cases, are trying to say). DABP 102provides various different training techniques that can be used by askill bot designer to train a skill bot, including variousmachine-learning based training techniques, rules-based trainingtechniques, and/or combinations thereof. In certain embodiments, aportion (e.g., 80%) of the training data is used to train a skill botmodel and another portion (e.g., the remaining 20%) is used to test orverify the model. Once trained, the trained model (also sometimesreferred to as the trained skill bot) can then be used to handle andrespond to user utterances. In certain cases, a user's utterance may bea question that requires only a single answer and no furtherconversation. In order to handle such situations, a Q&A(question-and-answer) intent may be defined for a skill bot. Q&A intentsare created in a similar manner as regular intents. The dialog flow forQ&A intents can be different from that for regular intents. For example,unlike regular intents, the dialog flow for a Q&A intent may not involveprompts for soliciting additional information (e.g., the value for aparticular entity) from the user.

(5) Creating a dialog flow for the skill bot—A dialog flow specified fora skill bot describes how the skill bot reacts as different intents forthe skill bot are resolved responsive to received user input. The dialogflow defines operations or actions that a skill bot will take, e.g., howthe skill bot responds to user utterances, how the skill bot promptsusers for input, and how the skill bot returns data. A dialog flow islike a flowchart that is followed by the skill bot. The skill botdesigner specifies a dialog flow using a language, such as markdownlanguage. In certain embodiments, a version of YAML called OBotML may beused to specify a dialog flow for a skill bot. The dialog flowdefinition for a skill bot acts as a model for the conversation itself,one that lets the skill bot designer choreograph the interactionsbetween a skill bot and the users that the skill bot services.

In certain embodiments, the dialog flow definition for a skill botcontains three sections:

-   -   (a) a context section    -   (b) a default transitions section    -   (c) a states section

Context section—The skill bot designer can define variables that areused in a conversation flow in the context section. Other variables thatmay be named in the context section include, without limitation:variables for error handling, variables for built-in or custom entities,user variables that enable the skill bot to recognize and persist userpreferences, and the like.

Default transitions section—Transitions for a skill bot can be definedin the dialog flow states section or in the default transitions section.The transitions defined in the default transition section act as afallback and get triggered when there are no applicable transitionsdefined within a state, or the conditions required to trigger a statetransition cannot be met. The default transitions section can be used todefine routing that allows the skill bot to gracefully handle unexpecteduser actions.

States section—A dialog flow and its related operations are defined as asequence of transitory states, which manage the logic within the dialogflow. Each state node within a dialog flow definition names a componentthat provides the functionality needed at that point in the dialog.States are thus built around the components. A state containscomponent-specific properties and defines the transitions to otherstates that get triggered after the component executes.

Special case scenarios may be handled using the states section. Forexample, there might be times when it is desirable to provide users theoption to temporarily leave a first skill they are engaged with to dosomething in a second skill within the digital assistant. For example,if a user is engaged in a conversation with a shopping skill (e.g., theuser has made some selections for purchase), the user may want to jumpto a banking skill (e.g., the user may want to ensure that he/she hasenough money for the purchase), and then return to the shopping skill tocomplete the user's order. To address this, the states section in thedialog flow definition of the first skill can be configured to initiatean interaction with the second different skill in the same digitalassistant and then return to the original dialog flow.

(6) Adding custom components to the skill bot—As described above, statesspecified in a dialog flow for a skill bot name components that providethe functionality needed corresponding to the states. Components enablea skill bot to perform functions. In certain embodiments, DABP 102provides a set of preconfigured components for performing a wide rangeof functions. A skill bot designer can select one of more of thesepreconfigured components and associate them with states in the dialogflow for a skill bot. The skill bot designer can also create custom ornew components using tools provided by DABP 102 and associate the customcomponents with one or more states in the dialog flow for a skill bot.

(7) Testing and deploying the skill bot—DABP 102 provides severalfeatures that enable the skill bot designer to test a skill bot beingdeveloped. The skill bot can then be deployed and included in a digitalassistant.

While the description above describes how to create a skill bot, similartechniques may also be used to create a digital assistant (or the masterbot). At the master bot or digital assistant level, built-in systemintents may be configured for the digital assistant. These built-insystem intents are used to identify general tasks that the digitalassistant itself (i.e., the master bot) can handle without invoking askill bot associated with the digital assistant. Examples of systemintents defined for a master bot include: (1) Exit: applies when theuser signals the desire to exit the current conversation or context inthe digital assistant; (2) Help: applies when the user asks for help ororientation; and (3) UnresolvedIntent: applies to user input thatdoesn't match well with the Exit and Help intents. The digital assistantalso stores information about the one or more skill bots associated withthe digital assistant. This information enables the master bot to selecta particular skill bot for handling an utterance.

At the master bot or digital assistant level, when a user inputs aphrase or utterance to the digital assistant, the digital assistant isconfigured to perform processing to determine how to route the utteranceand the related conversation. The digital assistant determines thisusing a routing model, which can be rules-based, AI-based, or acombination thereof. The digital assistant uses the routing model todetermine whether the conversation corresponding to the user inpututterance is to be routed to a particular skill for handling, is to behandled by the digital assistant or master bot itself per a built-insystem intent, or is to be handled as a different state in a currentconversation flow.

In certain embodiments, as part of this processing, the digitalassistant determines if the user input utterance explicitly identifies askill bot using its invocation name. If an invocation name is present inthe user input, then it is treated as an explicit invocation of theskill bot corresponding to the invocation name. In such a scenario, thedigital assistant may route the user input to the explicitly invokedskill bot for further handling. If there is no specific or explicitinvocation, in certain embodiments, the digital assistant evaluates thereceived user input utterance and computes confidence scores for thesystem intents and the skill bots associated with the digital assistant.The score computed for a skill bot or system intent represents howlikely the user input is representative of a task that the skill bot isconfigured to perform or is representative of a system intent. Anysystem intent or skill bot with an associated computed confidence scoreexceeding a threshold value (e.g., a Confidence Threshold routingparameter) is selected as a candidate for further evaluation. Thedigital assistant then selects, from the identified candidates, aparticular system intent or a skill bot for further handling of the userinput utterance. In certain embodiments, after one or more skill botsare identified as candidates, the intents associated with thosecandidate skills are evaluated (using the trained model for each skill)and confidence scores are determined for each intent. In general, anyintent that has a confidence score exceeding a threshold value (e.g.,70%) is treated as a candidate intent. If a particular skill bot isselected, then the user utterance is routed to that skill bot forfurther processing. If a system intent is selected, then one or moreactions are performed by the master bot itself according to the selectedsystem intent.

Application-Initiated Conversation Environment

FIG. 2 is a simplified block diagram of an environment 200 incorporatinga chatbot system 210 configured to handle application-initiatedconversations (AICs) according to certain embodiments. The chatbotsystem 210 can include a digital assistant 206 created in a similarmanner to the digital assistant 106 in the embodiment of FIG. 1, usingthe DABP 102. As depicted in FIG. 2, the environment 200 includesmessaging platforms 202 and 204 and applications 220 and 230. FIG. 2 ismerely an example. In other embodiments, the number of messagingplatforms and applications may be different. For instance, theenvironment 200 can be implemented using one messaging platform and oneapplication.

Digital assistant 206 is analogous to the digital assistant 106 inFIG. 1. As described above, a digital assistant can include a master botand one or more skill bots. However, for simplicity, the digitalassistant 206 is depicted in FIG. 2 as having only one chatbot, inparticular, a skill bot 216. In addition to the digital assistant 206,the chatbot system 210 can include one or more stand-alone bots that areconfigured to engage in conversation with a user of the chatbot systemwithout a digital assistant serving as an interface between thestand-alone bot and the user. For example, as depicted in FIG. 2, thechatbot system 210 can include a skill bot 218 that is separate from thedigital assistant 206.

Skill bots 216 and 218 can be implemented in the same manner asdescribed above with respect to the skill bots 116 in FIG. 1. Each ofthe skill bots 216, 218 can be configured to perform one or more typesof tasks on behalf of a user of the chatbot system 210. The skill bot216 is added to the digital assistant 206, whereas the skill bot 218 isstand-alone. Although part of the same chatbot system 210, the skill bot216 is not necessarily executed on the same computing device(s) as theskill bot 218. For instance, the skill bots 216 and 218 could beexecuted on different computers.

Messaging platforms 202 and 204 operate as intermediaries between thechatbot system 210 and users of the chatbot system 210. For example,messaging platform 202 may be convey messages between a user 207 and thechatbot system 210. Similarly, messaging platform 204 may conveymessages between a user 208 and the chatbot system 210. Each messagingplatform 202, 204 is generally configured to communicate with numerousdifferent users through the respective computing devices of such users(e.g., mobile devices or desktop computers). The messaging platforms202, 204 can be implemented using any communication infrastructuresuitable for conducting a conversation. For instance, a messagingplatform could be a short messaging service (SMS) based platformconfigured to send and receive text messages from mobile phones, wherethe users of the mobile phones are identified based on telephone number.As another example, a messaging platform could be configured to providean instant messenger service accessed through an application executed ona user's computing device.

As indicated above, the messaging platforms 202, 204 can convey messagesbetween users and the chatbot system 210. Thus, a conversation between auser and a chatbot within the chatbot system 210 can be conductedthrough a messaging platform. Additionally, in some embodiments, themessaging platforms 202, 204 may permit users of the chatbot system 210to communicate with each other. For instance, users with access to thesame messaging platform could send messages to each other via themessaging platform.

Access to a messaging platform by a chatbot system user (e.g., users207, 208) typically requires creation of a user identifier (ID) andpossibly one or more security credentials (e.g., a password). Forinstance, an SMS based messaging platform may be configured to recognizea user's telephone number as their user ID. As another example, the userID could be an alphanumeric username selected by the user or generatedby the messaging platform for the user.

For each user that the chatbot system 210 communicates with, the chatbotsystem 210 can create a user-specific communications channel fortransmitting messages between the user and the chatbot system 210. Forinstance, as shown in FIG. 2, the messaging platform 202 is coupled tothe chatbot system 210 via a user channel 227-1. Similarly, themessaging platform 204 is coupled to the chatbot system 210 via a userchannel 227-2. The chatbot system 210 can recognize a user by the sameuser ID that the user uses to access a messaging platform. Therefore,each user channel 227 may be associated with a particular user ID thatis used to access a particular messaging platform.

In some embodiments, a user may need to be authenticated before beingable to access the chatbot system 210. For instance, the environment 200could include a security service provider (e.g., a single sign-on (SSO)authentication service) configured to, after validating a user suppliedcredential, generate an access token that permits the user's computingdevice to communicate with the chatbot system 210. The securitymechanism used by the chatbot system 210 can be separate from that usedby a messaging platform (e.g., a user may log into a messaging platformand the chatbot system 210 using different credentials). Alternatively,a shared security mechanism can be used. For instance, the messagingplatforms 202, 204 and the chatbot system 210 could all be participantsin the same SSO authentication infrastructure.

Applications 220 and 230 are software applications that providefunctionality independent of the conversation-related functionalityprovided by the chatbot system 210. For example, the applications 220,230 could be applications that provide enterprise functionality (e.g.,human resources, accounting, custom relationship management, etc.). Theapplications 220, 230 are executed on one or more computer systems. Incertain embodiments, the computer systems on which applications 220, 230are executed are remotely located from the chatbot system 210. Forinstance, each of the applications 220, 230 could be executed on aseparate server or on a computing device used by a user 206, 207 forcommunicating with the chatbot system 210. Thus, the applications 220,230 can be executed from any number of different locations. Further, insome embodiments, one or more of the applications 220, 230 may beprovided through a web-based or cloud service.

The application 220 is configured to initiate conversations between theuser 207 and the digital assistant 206 (more specifically, the skill bot216). Similarly, the application 230 is configured to initiateconversations between the user 208 and the skill bot 218. To initiate aconversation, an application can generate an event and send the event tothe chatbot system 210 in the form of a notification 235 (e.g., adigital message). The notification can be sent through anapplication-specific communication channel. For instance, as depicted inFIG. 2, the application 220 is coupled to the digital assistant 206through an application channel 229-1, and the application 230 is coupledto the skill bot 218 through an application channel 229-2. Theapplication channels can be created by the chatbot system 210specifically for communications between a skill bot and an application.In some embodiments, an application channel is configured to receivenotifications 235 in the form of a Hypertext Transfer Protocol (HTTP)based POST request, where the POST request is sent through anapplication program interface (API), e.g., a Representational StateTransfer (REST) based API.

In certain embodiments, one or more of the application channels 229 maybe secured communication channels. For instance, each application 220,230 may be required to authenticate itself with the chatbot system 210before the chatbot system 210 will accept any notifications 235 from theapplication. Further, in some embodiments, each application channel 229is assigned an inbound URL for receiving messages from an applicationand, optionally, an outbound URL for sending messages to theapplication. For instance, a notification 235 could be sent through aninbound URL together with a security artifact (e.g., a secret keygenerated by the chatbot system 210 for signing messages from aparticular application with a cryptographic hash function such asSHA-256).

A notification 235 can include information indicating which chatbot isto engage a user in conversation. For instance, a notification mayinclude a payload section containing an identifier of a particularchatbot (e.g., the invocation name of a skill bot). Alternatively, thechatbot that is to engage the user in conversation can be identifiedbased on the application channel 229 that the notification 235 is sentthrough. As indicated above, the application channels 229 can beapplication-specific. Further, in some embodiments, a dedicatedapplication channel is provided for communications between anapplication and a particular chatbot. Thus, the chatbot system 210 coulddetermine which chatbot to use for a conversation based on theapplication channel over which the notification 235 is sent.

In certain embodiments, applications are configured to generate eventsbased on evaluating conditions associated with the events. Theconditions for events generated by the applications 220 and 230 can bestored as event configuration information 221 and 231, respectively. Anapplication can be configured to generate one or more types of events.For each type of event, a rule including a set of one or more conditionscan be defined such that when the set of one or more conditions issatisfied, the application evaluating the conditions will send acorresponding notification 235 to the chatbot system 210. In certainembodiments, an end-user (e.g., one of the users 207, 208) can configurethe rules for an application in order to specify what conditions willtrigger an application-initiated conversation and/or specify whatchatbots (or dialog flow states associated with those chatbots) toinvoke upon the application determining that a set of one or moreconditions is satisfied. In some embodiments, a bot developer or otheradministrative user (e.g., a user 104 of the DABP in FIG. 1 or anenterprise user who controls one of the applications 220, 230) canconfigure the conditions evaluated by an application.

A condition can be satisfied based upon the occurrence or non-occurrenceof the condition, as detected through monitoring performed by anapplication. The monitoring can be performed with respect to datamaintained locally within a computer system executing the application.For instance, a condition may correspond to the status of a variablestored in database of a computer system that executes the application220. An application can detect the occurrence of a condition throughpolling, receiving push notifications, continuous monitoring (e.g., of adatabase configured to store event-related information), or otherdetection mechanisms. In some instances, an application may, as part ofdetermining whether a condition is satisfied, communicate with one ormore computing devices or systems external to the computer system onwhich the application is executed. For example, as depicted in FIG. 2,remote computer systems 222 and 232 may be coupled to the applications220 and 230, respectively. Thus, the application 220 could monitorconditions within the remote computer system 222 and, similarly, theapplication 230 could monitor conditions within the remote computersystem 232. The statuses of the conditions within the remote computersystems 222 and 232 can be communicated to the applications asevent-related information 234-1 and 234-2, respectively.

As an example of a scenario in which a user of a chatbot system may findit helpful to have a conversation initiated by an application, considerthe following use case. Suppose that the application 220 is an expensereporting application through which the user 207 and other usersassociated with an enterprise (e.g., employees of the same company) cansubmit expense reports for reimbursement. Further, suppose that theskill bot 216 is a finance bot configured to assist users with managingtheir expense reports. For instance, the skill bot 216 could beconfigured with dialog flows designed to permit the user 207 to review,edit, and resubmit expense reports for approval by the accountingdepartment of the enterprise.

Depending on whether certain conditions occur with respect to an expensereport, a conversation between the skill bot 216 and the user 207 couldbegin in various states. For instance, the application 220 couldgenerate a first event when an expense report has been approved, asecond event when an expense report has been rejected, and a third eventwhen additional information is required for processing an expensereport. If the first event is generated, the skill bot 216 could beinvoked in a dialog state associated with output of a prompt requestinguser acknowledgment of the approval. If the second event is generated,the skill bot 216 could be invoked in a dialog state associated withoutput of user selectable options for editing and resubmitting theexpense report. If the third event is generated, the skill bot 216 couldbe invoked in a dialog state associated with output of a prompt for theuser to complete the expense report by providing missing information.Thus, an application can be configured to generate different types ofevents depending on what conditions are satisfied, with each type ofevent being associated with a corresponding dialog state for starting aconversation relating to the event.

The chatbot system 210 can be configured to, upon receiving anotification 235, generate a response 237 for output to a particularuser. As indicated above, the chatbot to use for engaging a user in anAIC can be identified based on information contained in the notification235 or based on the application channel 229 through which thenotification 235 is received by the chatbot system 210. Additionally,the notification 235 can indicate which user the response 237 should besent to, i.e., the user who is to participate in the AIC. For instance,the notification 235-1 could include a user ID that uniquely identifiesthe user 207 to the chatbot system 210. As indicated above, this user IDcan be the same user identifier by which the user accesses the messagingplatform 202. Alternatively, the chatbot system 210 may associate a userID with the user 207 that is different from the user identifier that themessaging platform 202 associates with the user 207. For instance, insome embodiments, the chatbot system 210 may associate an authenticateduser ID with a user, where the authenticated user ID is assigned to theuser by a security and/or identity service provider. The chatbot system210 may link the authenticated user ID with the user identifier used foraccessing the messaging platform so that when a notification 235containing an authenticated user ID is received, a response 237 can besent through the appropriate user channel 227. The application sendingthe notification 235 may be aware of the user ID as a result of anearlier communication between the application and the entity thatassigned the user ID (e.g., the chatbot system 210 or asecurity/identity service provider). In some embodiments, theapplication or the computer system on which the application executes isthe entity that assigns the user ID included in the notification 235.

Having identified all the participants to a conversation (e.g., aparticular user and a particular chatbot) based on receipt of anotification 235, the chatbot system 210 can generate a response 237 fortransmission through the user channel 227 associated with the identifieduser. The response 237 may depend on whether or not the identified useris currently engaged in a conversation with a chatbot in the chatbotsystem 210 (e.g., the skill bot 216 or the skill bot 218). For example,if the user is currently engaged in a conversation with a chatbot, thechatbot system 210 may generate a response 237 requesting the user toconfirm that he or she wishes to start to the new conversation. Such aresponse can be generated even if the chatbot for the new conversationis the same chatbot that the user is currently having a conversationwith. That is because the new conversation may require switching to adialog flow associated with a different intent than the intent that isassociated with the current dialog flow. As an example, the user couldbe asking a finance bot about the balance in the user's bank account,and the new conversation could relate to another task that the financebot is configured to help the user with, such as verifying a credit cardcharge. If the identified user is not currently engaged in aconversation with a chatbot in the chatbot system 210, then the chatbotsystem 210 may simply switch to the new conversation by invoking theidentified chatbot, in which case the response 237 could be a responsegenerated by the identified chatbot according to a dialog flowdefinition that has been configured for the identified chatbot. Theinstance, the notification 235-1 or information derived from thenotification 235-1 could be forwarded from the digital assistant 206 tothe skill bot 216 for use in determining the response 237-1.

If the user is currently engaged in a conversation and indicates that heor she does not wish to start the new conversation, the chatbot system210 may permit the user to finish the existing conversation. Uponreaching the end of the existing conversation (e.g., based on user inputof an utterance containing the word “exit” or after the user hasprovided all the information needed for the chatbot to complete acertain task), the chatbot system 210 can once again prompt the user forconfirmation that the user wants to start the new conversation. Thus,the chatbot system 210 can provide the user with the opportunity tobegin the new conversation even after the user has indicated that theexisting conversation should not be interrupted.

If the user is currently engaged in a conversation and indicates that heor she wants to start the new conversation, the chatbot system 210 maysuspend the existing conversation and subsequently provide the user withan opportunity to resume the suspended conversation. For instance, whenthe new conversation ends, the chatbot system 210 can output a promptrequesting the user to confirm that the suspended conversation should beresumed. The suspended conversation can be resumed based on saving thedialog flow state that existed at the time the switch to the newconversation was performed. For instance, the chatbot system 210 couldmaintain a context stack for all conversations involving the user thathave yet to be terminated, where each entry in the context stack pointsto a dialog flow state associated with a particular chatbot.

The dialog flow state in which to begin the new conversation can beexpressly indicated in a notification 235. Alternatively, in someembodiments, the chatbot system 210 can determine which dialog flowstate to start in based on the type of event that is generated. Forinstance, each type of event that an application is capable ofgenerating can be assigned an event identifier, the notification 235 caninclude such an event identifier, and the chatbot system 210 canmaintain a mapping between the event identifier and a particular dialogflow state. The event identifiers can be unique across all the chatbotsin the chatbot system 210 so that no event identifier is assigned tomore than one type of event. Alternatively, event identifiers could beunique within a chatbot, but not across chatbots. Associating eventidentifiers with dialog flow states would permit the dialog flowdefinition of a chatbot to be updated (e.g., by adding new states orchanging the name of an existing state) without also having toreconfigure an application in accordance with the updated dialog flowdefinition. Instead, the application need not be aware of which dialogflow state to use, and may simply refer to an event by its eventidentifier, with the mapping between the event identifier and itscorresponding dialog flow state being updated as needed via the chatbotsystem 210 (e.g., whenever the name of a dialog flow state that haspreviously been mapped is changed).

In addition to indicating (at least indirectly) a starting state for anew conversation, a notification 235 can, in some instances, includeinformation to be processed by the chatbot participating in the newconversation. For instance, the payload of a notification 235 couldinclude an event identifier plus values for one or more variables (e.g.,named entities) recognized by the chatbot system 210. The valuescontained in a notification 235 could be values that are processed bythe chatbot to determine, in connection with the starting state, anaction to take or a message to present to the user. For example, anotification 235 could pass the value of “checking” for the AccountTypeentity to enable a chatbot to begin a conversation with a welcomemessage related to checking accounts.

FIG. 3 is simplified flowchart depicting a process 300 for configuring achatbot system to handle application-initiated conversations accordingto certain embodiments. The processing depicted in FIG. 3 may beimplemented in software (e.g., code, instructions, program) executed byone or more processing units (e.g., processors, cores) of the respectivesystems, hardware, or combinations thereof. The software may be storedon a non-transitory storage medium (e.g., on a memory device). Themethod presented in FIG. 3 and described below is intended to beillustrative and non-limiting. Although FIG. 3 depicts the variousprocessing steps occurring in a particular sequence or order, this isnot intended to be limiting. In certain alternative embodiments, thesteps may be performed in some different order or some steps may also beperformed in parallel. In certain embodiments, such as in the embodimentdepicted in FIG. 1, the processing depicted in FIG. 3 may be performedusing a digital assistant builder platform, e.g., the DABP 102.

At 302, a communication channel is created for communications between achatbot system and a software application. For example, thecommunication channel may correspond to one of the application channels229 in FIG. 2. In some embodiments, the communication channel isspecified as part of configuring a skill bot. For example, prior toadding a skill bot to a digital assistant or as a stand-alone bot, theskill bot can be configured to define a separate application channel foreach application that the skill bot is to communicate with. Upon addingthe skill bot, the application channels configured for the skill bot canbe instantiated by the chatbot system, e.g., through allocatingcomputing resources for each configured application channel.

At 304, a dialog flow state is configured for a chatbot in the chatbotsystem. In particular, the dialog flow state is a starting state for aconversation relating to an event that can be generated by anapplication. As indicated above, a dialog flow definition can include astates section with different states that the dialog flow can transitionto. The dialog flow state configured in 304 can be one of the states inthe states section and can be defined together with other states in thestates section or added after the chatbot has been deployed in thechatbot system. For example, the dialog flow state in 304 could be acustom state created by a skill bot developer before or after adding theskill bot to a digital assistant.

At 306, one or more variables are associated with the dialog flow stateconfigured in 304. These are variables whose values can be passed to thechatbot system by an application (e.g., a value contained in the payloadof a notification 235). The one or more variables could include, forexample, system level entities that are recognized by all chatbots inthe chatbot system and/or bot level entities that are configuredspecifically for use by a particular chatbot. In certain embodiments,the associating of the variables in 306 is performed by declaring atleast some of these variables within the context section of the dialogflow definition for the chatbot whose dialog flow state is configured in304.

At 308, an event identifier is generated for the event mentioned abovein connection with block 304. The event identifier serves to distinguishthe event from other types of events that the chatbot system can benotified about. As mentioned above, event identifiers can be uniquewithin a chatbot or across chatbots.

At 310, a mapping that associates the event identifier generated in 308with the dialog flow state configured in 304 is stored. For example, themapping can be stored as a lookup table in a memory accessible to thechatbot system. In certain embodiments, the chatbot system is configuredto maintain a separate mapping for each chatbot in the chatbot system.Additionally, multiple event identifiers can be mapped to the samedialog flow state, e.g., a starting state that is common to twodifferent types of events.

FIG. 4A illustrates contents of an example event notification 402according to certain embodiments. The notification 402 may correspond toone of the notifications 235 in FIG. 2. As depicted in FIG. 4A, thenotification 402 can include a user ID (e.g., “16035550100”) and apayload section. The payload section can indicate that the notification402 is being sent from an application (type: “application”) and caninclude an event identifier (e.g., “msgReminder”). The payload sectioncan also include the name of a user channel (e.g.,“AppointmentUserChannel”) that can be used to send, via a messagingplatform, communications between the chatbot system and the userassociated with the user ID. For instance, AppointmentUserChannel maycorrespond to one of the user channels 227 in FIG. 2. Additionally, thepayload section can include values for one or more variables recognizedby the chatbot system. In FIG. 4A, these values include the value “JoeDoe” for the variable “patientName” and the value “5:00 pm” for thevariable “appointmentTime.” In the example of FIG. 4A, the notification402 does not expressly indicate which chatbot to use for a conversationrelating to the event associated with the identifier “msgReminder.”However, as indicated above, the chatbot can be identified based on amapping between the event identifier (msgReminder) and a dialog flowstate configured for the chatbot (e.g., the “remindermessage” state inFIG. 4B) or based on the application channel that the notification 402is sent through. Further, in another embodiment, the notification 402may expressly indicate which chatbot to use, e.g., by including in thepayload an invocation name or other identifier of the chatbot (e.g.,“skillName”: “FinancialBot”).

FIG. 4B illustrates an example of a dialog flow state 410 (named“remindermessage”) that can be configured for the event that is thesubject of the notification 402 in FIG. 4A. As shown in FIG. 4B, thedialog flow state 410 is configured to generate a reminder message for auser based on the variables whose values are included in thenotification 402. Substituting the values from the notification 402 intothe body of the reminder message would produce the following: “Hi JoeDoe, your next appointment is scheduled for 5:00 pm. Please reply tothis message to confirm, cancel, or postpone your appointment.” Thisreminder message would be sent to the user associated with user ID16035550100, via the AppointmentUserChannel indicated in thenotification 402.

FIG. 5 is simplified flowchart depicting a process 500 for initiating aconversation based on an event notification, according to certainembodiments. The processing depicted in FIG. 5 may be implemented insoftware (e.g., code, instructions, program) executed by one or moreprocessing units (e.g., processors, cores) of the respective systems,hardware, or combinations thereof. The software may be stored on anon-transitory storage medium (e.g., on a memory device). The methodpresented in FIG. 5 and described below is intended to be illustrativeand non-limiting. Although FIG. 5 depicts the various processing stepsoccurring in a particular sequence or order, this is not intended to belimiting. In certain alternative embodiments, the steps may be performedin some different order or some steps may also be performed in parallel.In certain embodiments, such as in the embodiment depicted in FIG. 2,the processing depicted in FIG. 5 may be performed using a chatbotsystem, e.g., the chatbot system 210.

At 502, an event notification is received from a software application.The event notification can be an electronic message (e.g., a messagethat is digitally encoded into one or more packets) that is sent basedon the software application determining that one or more conditionsassociated with the event are satisfied.

At 504, a user identifier, an event identifier and, optionally, one ormore inputs to a chatbot are identified. As indicated above, thisinformation can be included in a payload of the notification.Accordingly, the notification can be parsed to extract these items ofinformation.

At 506, a dialog flow state is identified. The identified dialog flowstate is a state which has been configured for the chatbot that will beused for a conversation relating to the event. For instance, the dialogflow state may be a state associated with a particular intentrepresenting a task that the chatbot is capable of performing. Thedialog flow state can be identified based on a stored mapping, e.g., byusing the event identifier as an index to a lookup table that stores anidentifier of the dialog flow state (e.g., the name of the dialog flowstate) in association with the event identifier. In some embodiments,identifying the dialog flow state involves first identifying the chatbot(e.g., based on an application channel through which the notificationwas received in 502 or based on a chatbot identifier included in thenotification) and then performing a lookup or search using informationstored for the identified chatbot (e.g., a lookup table createdspecifically for the identified chatbot).

At 508, the user who is to participate in the conversation is identifiedbased on the user identifier. As discussed earlier, a user identifiercan be an identifier that is associated with a particular user. Thus,the user identifier can be used to direct responses from the chatbotsystem to the particular user (e.g., through a user channel associatedwith the user identifier).

At 510, a determination is made whether the identified user is currentlyconversing with a chatbot in the chatbot system (e.g., a stand-aloneskill bot or a skill bot in a digital assistant). This determination canbe made by checking for the existence of any dialog flows that have notyet reached a terminal or end state. In some instances, one or moredialog flows may be queued (e.g., in a context stack) for the user andonly one of the dialog flows is currently active. If the user iscurrently conversing with a chatbot in the chatbot system, processingproceeds to 512. Otherwise, processing proceeds to 516.

At 512, the user is prompted to confirm the start of the conversationrelating to the event. The prompt can be sent to the user's computingdevice through a messaging platform and may be output at the user'scomputer device as an audio and/or visual message requesting a responsefrom the user (e.g., user input indicating yes or no).

At 514, user input is received in response to the prompt in 512. Theuser input can be received through the same messaging platform used forsending the prompt and indicates that the user wants to start the newconversation. As indicated above, such input can be received at varioustimes relative to an existing conversation. For instance, an indicationto start a new conversation can be received before interrupting theexisting conversation or after the existing conversation has reached anend.

At 516, the chatbot for which the dialog flow state identified in 506 isconfigured is invoked in the identified dialog flow state. Depending onhow this dialog flow state has been configured, the chatbot may performone or more actions and/or generate one or more messages for the user.Further, as indicated above, these actions or messages can be determinedbased on input data (e.g., values for one or more variables) included inthe notification.

Example Application-Initiated Conversations

The following are examples of dialog that can be generated in connectionwith an application-initiated conversation. In these examples, theresponses to the user are generated by a digital assistant (DA) thatincludes a finance bot and a pizza ordering bot. However, the responsescould equally be generated by a chatbot system with stand-alone skillbots.

Example 1: No Existing Conversation

-   -   (Event Notification Received)    -   DA: For which account do you want your balance? (1)        checking, (2) savings, (3) credit card    -   User: savings    -   DA: The balance in your savings account (258923-832) is        $2,610.56

In example 1, the user is not currently engaged in conversation with anychatbot in the chatbot system at the time that the event notification isreceived. Accordingly, the chatbot system (e.g., the digital assistant)can invoke the chatbot for the new conversation without prompting ornotifying the user. In this example, the chatbot for the newconversation is a finance bot configured to provide the user with thebalance in the user's financial account. The finance bot is invoked in adialog flow state associated with output of a request for user inputidentifying the specific account that the user is interested in knowingthe balance of. As discussed above, this starting state can be mapped toan event identifier contained in the event notification.

Example 2: Existing Conversation Interrupted to Start New Conversation

-   -   User: order pizza    -   DA: How old are you?    -   (Event notification received)    -   DA: Do you want to switch to Notification in FinancialBot now?    -   User: Yes    -   DA: For which account do you want your balance? (1)        checking, (2) savings, (3) credit card    -   User: savings    -   DA: The balance in your savings account (258923-832) is        $2,610.56    -   DA: Do you want to resume OrderPizza in PizzaBot now?    -   User: Yes    -   DA: How old are you?    -   User: 20    -   DA: What crust do you want for your pizza? (1) Thick, (2)        Thin, (3) Stuffed, (4) Pan    -   User: Thick    -   . . .

In example 2, the user is conversing with a pizza ordering bot when theevent notification is received. Accordingly, the chatbot system ordigital assistant generates a prompt requesting the user to confirmwhether the user wants to switch to the new conversation (e.g., aconversation with the finance bot). As shown in the example dialogabove, if the user responds by indicating that the new conversationshould begin, the existing conversation is interrupted (e.g.,temporarily suspended). Once the new conversation has ended (e.g., afterthe finance bot has provided the balance in the user's account), thechatbot system asks the user whether to resume the interruptedconversation with the pizza ordering bot. When the user indicates thatthey want to resume the interrupted conversation, the interruptedconversation is resumed in the same dialog flow state where theconversation left off.

Example 3: New Conversation Postponed Until End of Existing Conversation

-   -   User: order pizza    -   DA: How old are you?    -   (Event notification received)    -   DA: Do you want to switch to Notification in FinancialBot now?    -   User: No    -   DA: How old are you?    -   User: 20    -   DA: What crust do you want for your pizza? (1) Thick, (2)        Thin, (3) Stuffed, (4) Pan    -   User: Thick    -   . . .    -   (End of order pizza flow)    -   DA: Do you want to start with Notification in FinancialBot now?    -   User: Yes    -   DA: For which account do you want your balance? (1)        checking, (2) savings, (3) credit card    -   User: savings    -   DA: The balance in your savings account (258923-832) is        $2,610.56

Example 3 illustrates what might happen if the user responds to theprompt in example 2 by indicating that they do not wish to start the newconversation. In that case, the user is permitted to continue conversingwith the pizza ordering bot. After the end of the conversation (e.g.,once the user has finished placing an order for pizza), the digitalassistant once again asks the user if they want to start the newconversation.

Example Computing Environments for Implementing a Chatbot System

FIG. 6 depicts a simplified diagram of a distributed system 600 forimplementing an embodiment. In the illustrated embodiment, distributedsystem 600 includes one or more client computing devices 602, 604, 606,and 608, coupled to a server 612 via one or more communication networks610. Clients computing devices 602, 604, 606, and 608 may be configuredto execute one or more applications.

In various embodiments, server 612 may be adapted to run one or moreservices or software applications that enable an application-initiatedconversation (AIC) between a user and a chatbot to be created. Forexample, the server 612 may be a server that executes the applicationthat initiates the conversation or a server that executes the chatbot.

In certain embodiments, server 612 may also provide other services orsoftware applications that can include non-virtual and virtualenvironments. In some embodiments, these services may be offered asweb-based or cloud services, such as under a Software as a Service(SaaS) model to the users of client computing devices 602, 604, 606,and/or 608. Users operating client computing devices 602, 604, 606,and/or 608 may in turn utilize one or more client applications tointeract with server 612 to utilize the services provided by thesecomponents.

In the configuration depicted in FIG. 6, server 612 may include one ormore components 618, 620 and 622 that implement the functions performedby server 612. These components may include software components that maybe executed by one or more processors, hardware components, orcombinations thereof. It should be appreciated that various differentsystem configurations are possible, which may be different fromdistributed system 600. The embodiment shown in FIG. 6 is thus oneexample of a distributed system for implementing an embodiment systemand is not intended to be limiting.

Users may use client computing devices 602, 604, 606, and/or 608 toconfigure a chatbot and/or a software application, to add or remove achatbot from a chatbot system, and to engage in conversation with achatbot (e.g., directly or through a digital assistant), in accordancewith the teachings of this disclosure. A client device may provide aninterface that enables a user of the client device to interact with theclient device. The client device may also output information to the uservia this interface. Although FIG. 6 depicts only four client computingdevices, any number of client computing devices may be supported.

The client devices may include various types of computing systems suchas portable handheld devices, general purpose computers such as personalcomputers and laptops, workstation computers, wearable devices, gamingsystems, thin clients, various messaging devices, sensors or othersensing devices, and the like. These computing devices may run varioustypes and versions of software applications and operating systems (e.g.,Microsoft Windows®, Apple Macintosh®, UNIX® or UNIX-like operatingsystems, Linux or Linux-like operating systems such as Google Chrome™OS) including various mobile operating systems (e.g., Microsoft WindowsMobile®, iOS®, Windows Phone®, Android™, BlackBerry®, Palm OS®).Portable handheld devices may include cellular phones, smartphones,(e.g., an iPhone®), tablets (e.g., iPad®), personal digital assistants(PDAs), and the like. Wearable devices may include Google Glass® headmounted display, and other devices. Gaming systems may include varioushandheld gaming devices, Internet-enabled gaming devices (e.g., aMicrosoft Xbox® gaming console with or without a Kinect® gesture inputdevice, Sony PlayStation® system, various gaming systems provided byNintendo®, and others), and the like. The client devices may be capableof executing various different applications such as variousInternet-related apps, communication applications (e.g., E-mailapplications, short message service (SMS) applications) and may usevarious communication protocols.

Network(s) 610 may be any type of network familiar to those skilled inthe art that can support data communications using any of a variety ofavailable protocols, including without limitation TCP/IP (transmissioncontrol protocol/Internet protocol), SNA (systems network architecture),IPX (Internet packet exchange), AppleTalk®, and the like. Merely by wayof example, network(s) 610 can be a local area network (LAN), networksbased on Ethernet, Token-Ring, a wide-area network (WAN), the Internet,a virtual network, a virtual private network (VPN), an intranet, anextranet, a public switched telephone network (PSTN), an infra-rednetwork, a wireless network (e.g., a network operating under any of theIEEE 802.11 suite of protocols, Bluetooth®, and/or any other wirelessprotocol), and/or any combination of these and/or other networks.

Server 612 may be composed of one or more general purpose computers,specialized server computers (including, by way of example, PC (personalcomputer) servers, UNIX® servers, mid-range servers, mainframecomputers, rack-mounted servers, etc.), server farms, server clusters,or any other appropriate arrangement and/or combination. Server 612 caninclude one or more virtual machines running virtual operating systems,or other computing architectures involving virtualization such as one ormore flexible pools of logical storage devices that can be virtualizedto maintain virtual storage devices for the server. In variousembodiments, server 612 may be adapted to run one or more services orsoftware applications that provide the functionality described in theforegoing disclosure.

The computing systems in server 612 may run one or more operatingsystems including any of those discussed above, as well as anycommercially available server operating system. Server 612 may also runany of a variety of additional server applications and/or mid-tierapplications, including HTTP (hypertext transport protocol) servers, FTP(file transfer protocol) servers, CGI (common gateway interface)servers, JAVA® servers, database servers, and the like. Exemplarydatabase servers include without limitation those commercially availablefrom Oracle®, Microsoft®, Sybase®, IBM® (International BusinessMachines), and the like.

In some implementations, server 612 may include one or more applicationsto analyze and consolidate data feeds and/or event updates received fromusers of client computing devices 602, 604, 606, and 608. As an example,data feeds and/or event updates may include, but are not limited to,Twitter® feeds, Facebook® updates or real-time updates received from oneor more third party information sources and continuous data streams,which may include real-time events related to sensor data applications,financial tickers, network performance measuring tools (e.g., networkmonitoring and traffic management applications), clickstream analysistools, automobile traffic monitoring, and the like. Server 612 may alsoinclude one or more applications to display the data feeds and/orreal-time events via one or more display devices of client computingdevices 602, 604, 606, and 608.

Distributed system 600 may also include one or more data repositories614, 616. These data repositories may be used to store data and otherinformation in certain embodiments. For example, one or more of the datarepositories 614, 616 may be used to store AIC-related configurationinformation such as rules and their associated conditions, and mappingsbetween event identifiers and dialog flow states. Data repositories 614,616 may reside in a variety of locations. For example, a data repositoryused by server 612 may be local to server 612 or may be remote fromserver 612 and in communication with server 612 via a network-based ordedicated connection. Data repositories 614, 616 may be of differenttypes. In certain embodiments, a data repository used by server 612 maybe a database, for example, a relational database, such as databasesprovided by Oracle Corporation® and other vendors. One or more of thesedatabases may be adapted to enable storage, update, and retrieval ofdata to and from the database in response to SQL-formatted commands.

In certain embodiments, one or more of data repositories 614, 616 mayalso be used by applications to store application data. The datarepositories used by applications may be of different types such as, forexample, a key-value store repository, an object store repository, or ageneral storage repository supported by a file system.

In certain embodiments, the AIC-related functionalities described inthis disclosure may be offered as services via a cloud environment. FIG.7 is a simplified block diagram of a cloud-based system environment inwhich various AIC-related services may be offered as cloud services, inaccordance with certain embodiments. In the embodiment depicted in FIG.7, cloud infrastructure system 702 may provide one or more cloudservices that may be requested by users using one or more clientcomputing devices 704, 706, and 708. Cloud infrastructure system 702 maycomprise one or more computers and/or servers that may include thosedescribed above for server 612. The computers in cloud infrastructuresystem 702 may be organized as general purpose computers, specializedserver computers, server farms, server clusters, or any otherappropriate arrangement and/or combination.

Network(s) 710 may facilitate communication and exchange of data betweenclients 704, 706, and 708 and cloud infrastructure system 702.Network(s) 710 may include one or more networks. The networks may be ofthe same or different types. Network(s) 710 may support one or morecommunication protocols, including wired and/or wireless protocols, forfacilitating the communications.

The embodiment depicted in FIG. 7 is only one example of a cloudinfrastructure system and is not intended to be limiting. It should beappreciated that, in some other embodiments, cloud infrastructure system702 may have more or fewer components than those depicted in FIG. 7, maycombine two or more components, or may have a different configuration orarrangement of components. For example, although FIG. 7 depicts threeclient computing devices, any number of client computing devices may besupported in alternative embodiments.

The term cloud service is generally used to refer to a service that ismade available to users on demand and via a communication network suchas the Internet by systems (e.g., cloud infrastructure system 702) of aservice provider. Typically, in a public cloud environment, servers andsystems that make up the cloud service provider's system are differentfrom the customer's own on-premise servers and systems. The cloudservice provider's systems are managed by the cloud service provider.Customers can thus avail themselves of cloud services provided by acloud service provider without having to purchase separate licenses,support, or hardware and software resources for the services. Forexample, a cloud service provider's system may host an application, anda user may, via the Internet, on demand, order and use the applicationwithout the user having to buy infrastructure resources for executingthe application. Cloud services are designed to provide easy, scalableaccess to applications, resources and services. Several providers offercloud services. For example, several cloud services are offered byOracle Corporation® of Redwood Shores, Calif., such as middlewareservices, database services, Java cloud services, and others.

In certain embodiments, cloud infrastructure system 702 may provide oneor more cloud services using different models such as under a Softwareas a Service (SaaS) model, a Platform as a Service (PaaS) model, anInfrastructure as a Service (IaaS) model, and others, including hybridservice models. Cloud infrastructure system 702 may include a suite ofapplications, middleware, databases, and other resources that enableprovision of the various cloud services.

A SaaS model enables an application or software to be delivered to acustomer over a communication network like the Internet, as a service,without the customer having to buy the hardware or software for theunderlying application. For example, a SaaS model may be used to providecustomers access to on-demand applications that are hosted by cloudinfrastructure system 702. Examples of SaaS services provided by OracleCorporation® include, without limitation, various services for humanresources/capital management, customer relationship management (CRM),enterprise resource planning (ERP), supply chain management (SCM),enterprise performance management (EPM), analytics services, socialapplications, and others.

An IaaS model is generally used to provide infrastructure resources(e.g., servers, storage, hardware and networking resources) to acustomer as a cloud service to provide elastic compute and storagecapabilities. Various IaaS services are provided by Oracle Corporation®.

A PaaS model is generally used to provide, as a service, platform andenvironment resources that enable customers to develop, run, and manageapplications and services without the customer having to procure, build,or maintain such resources. Examples of PaaS services provided by OracleCorporation® include, without limitation, Oracle Java Cloud Service(JCS), Oracle Database Cloud Service (DBCS), data management cloudservice, various application development solutions services, and others.

Cloud services are generally provided on an on-demand self-servicebasis, subscription-based, elastically scalable, reliable, highlyavailable, and secure. For example, a customer, via a subscriptionorder, may order one or more services provided by cloud infrastructuresystem 702. Cloud infrastructure system 702 then performs processing toprovide the services requested in the customer's subscription order. Forexample, a customer may submit a subscription order for registering askill bot with a master bot or otherwise adding/configuring a skill botwithin a chatbot system. Cloud infrastructure system 702 may beconfigured to provide one or even multiple cloud services.

Cloud infrastructure system 702 may provide the cloud services viadifferent deployment models. In a public cloud model, cloudinfrastructure system 702 may be owned by a third party cloud servicesprovider and the cloud services are offered to any general publiccustomer, where the customer can be an individual or an enterprise. Incertain other embodiments, under a private cloud model, cloudinfrastructure system 702 may be operated within an organization (e.g.,within an enterprise organization) and services provided to customersthat are within the organization. For example, the customers may bevarious departments of an enterprise such as the Human Resourcesdepartment, the Payroll department, etc. or even individuals within theenterprise. In certain other embodiments, under a community cloud model,the cloud infrastructure system 702 and the services provided may beshared by several organizations in a related community. Various othermodels such as hybrids of the above mentioned models may also be used.

Client computing devices 704, 706, and 708 may be of different types(such as devices 602, 604, 606, and 608 depicted in FIG. 6) and may becapable of operating one or more client applications. A user may use aclient device to interact with cloud infrastructure system 702, such asto request a service provided by cloud infrastructure system 702. Forexample, a user may use a client device to request an AIC-relatedservice described in this disclosure.

In some embodiments, the processing performed by cloud infrastructuresystem 702 for providing AIC-related services may involve big dataanalysis. This analysis may involve using, analyzing, and manipulatinglarge data sets to detect and visualize various trends, behaviors,relationships, etc. within the data. This analysis may be performed byone or more processors, possibly processing the data in parallel,performing simulations using the data, and the like. For example, bigdata analysis may be performed by cloud infrastructure system 702 forautomatically determining, based on usage trends for a group of users,which conditions to apply for triggering an AIC. The data used for thisanalysis may include structured data (e.g., data stored in a database orstructured according to a structured model) and/or unstructured data(e.g., data blobs (binary large objects)).

As depicted in the embodiment in FIG. 7, cloud infrastructure system 702may include infrastructure resources 730 that are utilized forfacilitating the provision of various cloud services offered by cloudinfrastructure system 702. Infrastructure resources 730 may include, forexample, processing resources, storage or memory resources, networkingresources, and the like.

In certain embodiments, to facilitate efficient provisioning of theseresources for supporting the various cloud services provided by cloudinfrastructure system 702 for different customers, the resources may bebundled into sets of resources or resource modules (also referred to as“pods”). Each resource module or pod may comprise a pre-integrated andoptimized combination of resources of one or more types. In certainembodiments, different pods may be pre-provisioned for different typesof cloud services. For example, a first set of pods may be provisionedfor a database service, a second set of pods, which may include adifferent combination of resources than a pod in the first set of pods,may be provisioned for Java service, and the like. For some services,the resources allocated for provisioning the services may be sharedbetween the services.

Cloud infrastructure system 702 may itself internally use services 732that are shared by different components of cloud infrastructure system702 and which facilitate the provisioning of services by cloudinfrastructure system 702. These internal shared services may include,without limitation, a security and identity service, an integrationservice, an enterprise repository service, an enterprise managerservice, a virus scanning and white list service, a high availability,backup and recovery service, a service for enabling cloud support, anemail service, a notification service, a file transfer service, and thelike.

Cloud infrastructure system 702 may comprise multiple subsystems. Thesesubsystems may be implemented in software, or hardware, or combinationsthereof. As depicted in FIG. 7, the subsystems may include a userinterface subsystem 712 that enables users or customers of cloudinfrastructure system 702 to interact with cloud infrastructure system702. User interface subsystem 712 may include various differentinterfaces such as a web interface 714, an online store interface 716where cloud services provided by cloud infrastructure system 702 areadvertised and are purchasable by a consumer, and other interfaces 718.For example, a customer may, using a client device, request (servicerequest 734) one or more services provided by cloud infrastructuresystem 702 using one or more of interfaces 714, 716, and 718. Forexample, a customer may access the online store, browse cloud servicesoffered by cloud infrastructure system 702, and place a subscriptionorder for one or more services offered by cloud infrastructure system702 that the customer wishes to subscribe to. The service request mayinclude information identifying the customer and one or more servicesthat the customer desires to subscribe to. For example, a customer mayplace a subscription order for an AIC-related service offered by cloudinfrastructure system 702. As part of the order, the customer mayprovide information identifying a set of users who are authorized toaccess a particular skill or bot.

In certain embodiments, such as the embodiment depicted in FIG. 7, cloudinfrastructure system 702 may comprise an order management subsystem(OMS) 720 that is configured to process the new order. As part of thisprocessing, OMS 720 may be configured to: create an account for thecustomer, if not done already; receive billing and/or accountinginformation from the customer that is to be used for billing thecustomer for providing the requested service to the customer; verify thecustomer information; upon verification, book the order for thecustomer; and orchestrate various workflows to prepare the order forprovisioning.

Once properly validated, OMS 720 may then invoke the order provisioningsubsystem (OPS) 724 that is configured to provision resources for theorder including processing, memory, and networking resources. Theprovisioning may include allocating resources for the order andconfiguring the resources to facilitate the service requested by thecustomer order. The manner in which resources are provisioned for anorder and the type of the provisioned resources may depend upon the typeof cloud service that has been ordered by the customer. For example,according to one workflow, OPS 724 may be configured to determine theparticular cloud service being requested and identify a number of podsthat may have been pre-configured for that particular cloud service. Thenumber of pods that are allocated for an order may depend upon thesize/amount/level/scope of the requested service. For example, thenumber of pods to be allocated may be determined based upon the numberof users to be supported by the service, the duration of time for whichthe service is being requested, and the like. The allocated pods maythen be customized for the particular requesting customer for providingthe requested service.

Cloud infrastructure system 702 may send a response or notification 744to the requesting customer to indicate when the requested service is nowready for use. In some instances, information (e.g., a link) may be sentto the customer that enables the customer to start using and availingthe benefits of the requested services. In certain embodiments, for acustomer requesting the AIC-related service, the response may include aconfirmation that a bot has been successfully configured for handlingAICs triggered by a particular software application.

Cloud infrastructure system 702 may provide services to multiplecustomers. For each customer, cloud infrastructure system 702 isresponsible for managing information related to one or more subscriptionorders received from the customer, maintaining customer data related tothe orders, and providing the requested services to the customer. Cloudinfrastructure system 702 may also collect usage statistics regarding acustomer's use of subscribed services. For example, statistics may becollected for the amount of storage used, the amount of datatransferred, the number of users, and the amount of system up time andsystem down time, and the like. This usage information may be used tobill the customer. Billing may be done, for example, on a monthly cycle.

Cloud infrastructure system 702 may provide services to multiplecustomers in parallel. Cloud infrastructure system 702 may storeinformation for these customers, including possibly proprietaryinformation. In certain embodiments, cloud infrastructure system 702comprises an identity management subsystem (IMS) 728 that is configuredto manage customers information and provide the separation of themanaged information such that information related to one customer is notaccessible by another customer. IMS 728 may be configured to providevarious security-related services such as identity services, such asinformation access management, authentication and authorizationservices, services for managing customer identities and roles andrelated capabilities, and the like.

FIG. 8 illustrates an exemplary computer system 800 that may be used toimplement certain embodiments. For example, in some embodiments,computer system 800 may be used to implement any of various servers andcomputer systems described above. As shown in FIG. 8, computer system800 includes various subsystems including a processing subsystem 804that communicates with a number of other subsystems via a bus subsystem802. These other subsystems may include a processing acceleration unit806, an I/O subsystem 808, a storage subsystem 818, and a communicationssubsystem 824. Storage subsystem 818 may include non-transitorycomputer-readable storage media including storage media 822 and a systemmemory 810.

Bus subsystem 802 provides a mechanism for letting the variouscomponents and subsystems of computer system 800 communicate with eachother as intended. Although bus subsystem 802 is shown schematically asa single bus, alternative embodiments of the bus subsystem may utilizemultiple buses. Bus subsystem 802 may be any of several types of busstructures including a memory bus or memory controller, a peripheralbus, a local bus using any of a variety of bus architectures, and thelike. For example, such architectures may include an Industry StandardArchitecture (ISA) bus, Micro Channel Architecture (MCA) bus, EnhancedISA (EISA) bus, Video Electronics Standards Association (VESA) localbus, and Peripheral Component Interconnect (PCI) bus, which can beimplemented as a Mezzanine bus manufactured to the IEEE P1386.1standard, and the like.

Processing subsystem 804 controls the operation of computer system 800and may comprise one or more processors, application specific integratedcircuits (ASICs), or field programmable gate arrays (FPGAs). Theprocessors may include be single core or multicore processors. Theprocessing resources of computer system 800 can be organized into one ormore processing units 832, 834, etc. A processing unit may include oneor more processors, one or more cores from the same or differentprocessors, a combination of cores and processors, or other combinationsof cores and processors. In some embodiments, processing subsystem 804can include one or more special purpose co-processors such as graphicsprocessors, digital signal processors (DSPs), or the like. In someembodiments, some or all of the processing units of processing subsystem804 can be implemented using customized circuits, such as applicationspecific integrated circuits (ASICs), or field programmable gate arrays(FPGAs).

In some embodiments, the processing units in processing subsystem 804can execute instructions stored in system memory 810 or on computerreadable storage media 822. In various embodiments, the processing unitscan execute a variety of programs or code instructions and can maintainmultiple concurrently executing programs or processes. At any giventime, some or all of the program code to be executed can be resident insystem memory 810 and/or on computer-readable storage media 822including potentially on one or more storage devices. Through suitableprogramming, processing subsystem 804 can provide variousfunctionalities described above. In instances where computer system 800is executing one or more virtual machines, one or more processing unitsmay be allocated to each virtual machine.

In certain embodiments, a processing acceleration unit 806 mayoptionally be provided for performing customized processing or foroff-loading some of the processing performed by processing subsystem 804so as to accelerate the overall processing performed by computer system800.

I/O subsystem 808 may include devices and mechanisms for inputtinginformation to computer system 800 and/or for outputting informationfrom or via computer system 800. In general, use of the term inputdevice is intended to include all possible types of devices andmechanisms for inputting information to computer system 800. Userinterface input devices may include, for example, a keyboard, pointingdevices such as a mouse or trackball, a touchpad or touch screenincorporated into a display, a scroll wheel, a click wheel, a dial, abutton, a switch, a keypad, audio input devices with voice commandrecognition systems, microphones, and other types of input devices. Userinterface input devices may also include motion sensing and/or gesturerecognition devices such as the Microsoft Kinect® motion sensor thatenables users to control and interact with an input device, theMicrosoft Xbox® 360 game controller, devices that provide an interfacefor receiving input using gestures and spoken commands. User interfaceinput devices may also include eye gesture recognition devices such asthe Google Glass® blink detector that detects eye activity (e.g.,“blinking” while taking pictures and/or making a menu selection) fromusers and transforms the eye gestures as inputs to an input device(e.g., Google Glass®). Additionally, user interface input devices mayinclude voice recognition sensing devices that enable users to interactwith voice recognition systems (e.g., Siri® navigator) through voicecommands.

Other examples of user interface input devices include, withoutlimitation, three dimensional (3D) mice, joysticks or pointing sticks,gamepads and graphic tablets, and audio/visual devices such as speakers,digital cameras, digital camcorders, portable media players, webcams,image scanners, fingerprint scanners, barcode reader 3D scanners, 3Dprinters, laser rangefinders, and eye gaze tracking devices.Additionally, user interface input devices may include, for example,medical imaging input devices such as computed tomography, magneticresonance imaging, position emission tomography, and medicalultrasonography devices. User interface input devices may also include,for example, audio input devices such as MIDI keyboards, digital musicalinstruments and the like.

In general, use of the term output device is intended to include allpossible types of devices and mechanisms for outputting information fromcomputer system 800 to a user or other computer. User interface outputdevices may include a display subsystem, indicator lights, or non-visualdisplays such as audio output devices, etc. The display subsystem may bea cathode ray tube (CRT), a flat-panel device, such as that using aliquid crystal display (LCD) or plasma display, a projection device, atouch screen, and the like. For example, user interface output devicesmay include, without limitation, a variety of display devices thatvisually convey text, graphics and audio/video information such asmonitors, printers, speakers, headphones, automotive navigation systems,plotters, voice output devices, and modems.

Storage subsystem 818 provides a repository or data store for storinginformation and data that is used by computer system 800. Storagesubsystem 818 provides a tangible non-transitory computer-readablestorage medium for storing the basic programming and data constructsthat provide the functionality of some embodiments. Storage subsystem818 may store software (e.g., programs, code modules, instructions) thatwhen executed by processing subsystem 804 provides the functionalitydescribed above. The software may be executed by one or more processingunits of processing subsystem 804. Storage subsystem 818 may alsoprovide a repository for storing data used in accordance with theteachings of this disclosure.

Storage subsystem 818 may include one or more non-transitory memorydevices, including volatile and non-volatile memory devices. As shown inFIG. 8, storage subsystem 818 includes a system memory 810 and acomputer-readable storage media 822. System memory 810 may include anumber of memories including a volatile main random access memory (RAM)for storage of instructions and data during program execution and anon-volatile read only memory (ROM) or flash memory in which fixedinstructions are stored. In some implementations, a basic input/outputsystem (BIOS), containing the basic routines that help to transferinformation between elements within computer system 800, such as duringstart-up, may typically be stored in the ROM. The RAM may contain dataand/or program modules that are presently being operated and executed byprocessing subsystem 804. In some implementations, system memory 810 mayinclude multiple different types of memory, such as static random accessmemory (SRAM), dynamic random access memory (DRAM), and the like.

By way of example, and not limitation, as depicted in FIG. 8, systemmemory 810 may load application programs 812 that are being executed,which may include various applications such as Web browsers, mid-tierapplications, relational database management systems (RDBMS), etc.,program data 814, and an operating system 816. By way of example,operating system 816 may include various versions of Microsoft Windows®,Apple Macintosh®, and/or Linux operating systems, a variety ofcommercially-available UNIX® or UNIX-like operating systems (includingwithout limitation the variety of GNU/Linux operating systems, theGoogle Chrome® OS, and the like) and/or mobile operating systems such asiOS, Windows® Phone, Android® OS, BlackBerry® OS, Palm® OS operatingsystems, and others.

Computer-readable storage media 822 may store programming and dataconstructs that provide the functionality of some embodiments.Computer-readable media 822 may provide storage of computer-readableinstructions, data structures, program modules, and other data forcomputer system 800. Software (programs, code modules, instructions)that, when executed by processing subsystem 804 provides thefunctionality described above, may be stored in storage subsystem 818.By way of example, computer-readable storage media 822 may includenon-volatile memory such as a hard disk drive, a magnetic disk drive, anoptical disk drive such as a CD ROM, DVD, a Blu-Ray® disk, or otheroptical media. Computer-readable storage media 822 may include, but isnot limited to, Zip® drives, flash memory cards, universal serial bus(USB) flash drives, secure digital (SD) cards, DVD disks, digital videotape, and the like. Computer-readable storage media 822 may alsoinclude, solid-state drives (SSD) based on non-volatile memory such asflash-memory based SSDs, enterprise flash drives, solid state ROM, andthe like, SSDs based on volatile memory such as solid state RAM, dynamicRAM, static RAM, DRAM-based SSDs, magnetoresistive RAM (MRAM) SSDs, andhybrid SSDs that use a combination of DRAM and flash memory based SSDs.

In certain embodiments, storage subsystem 818 may also include acomputer-readable storage media reader 820 that can further be connectedto computer-readable storage media 822. Reader 820 may receive and beconfigured to read data from a memory device such as a disk, a flashdrive, etc.

In certain embodiments, computer system 800 may support virtualizationtechnologies, including but not limited to virtualization of processingand memory resources. For example, computer system 800 may providesupport for executing one or more virtual machines. In certainembodiments, computer system 800 may execute a program such as ahypervisor that facilitated the configuring and managing of the virtualmachines. Each virtual machine may be allocated memory, compute (e.g.,processors, cores), I/O, and networking resources. Each virtual machinegenerally runs independently of the other virtual machines. A virtualmachine typically runs its own operating system, which may be the sameas or different from the operating systems executed by other virtualmachines executed by computer system 800. Accordingly, multipleoperating systems may potentially be run concurrently by computer system800.

Communications subsystem 824 provides an interface to other computersystems and networks. Communications subsystem 824 serves as aninterface for receiving data from and transmitting data to other systemsfrom computer system 800. For example, communications subsystem 824 mayenable computer system 800 to establish a communication channel to oneor more client devices via the Internet for receiving and sendinginformation from and to the client devices. For example, thecommunication subsystem may be used for communications between a masterbot and an individual bot in connection with a routing decision, or forcommunications between an individual bot and a user after the user hasbeen routed to the individual bot.

Communication subsystem 824 may support both wired and/or wirelesscommunication protocols. For example, in certain embodiments,communications subsystem 824 may include radio frequency (RF)transceiver components for accessing wireless voice and/or data networks(e.g., using cellular telephone technology, advanced data networktechnology, such as 3G, 4G or EDGE (enhanced data rates for globalevolution), WiFi (IEEE 802.XX family standards, or other mobilecommunication technologies, or any combination thereof), globalpositioning system (GPS) receiver components, and/or other components.In some embodiments communications subsystem 824 can provide wirednetwork connectivity (e.g., Ethernet) in addition to or instead of awireless interface.

Communication subsystem 824 can receive and transmit data in variousforms. For example, in some embodiments, in addition to other forms,communications subsystem 824 may receive input communications in theform of structured and/or unstructured data feeds 826, event streams828, event updates 830, and the like. For example, communicationssubsystem 824 may be configured to receive (or send) data feeds 826 inreal-time from users of social media networks and/or other communicationservices such as Twitter® feeds, Facebook® updates, web feeds such asRich Site Summary (RSS) feeds, and/or real-time updates from one or morethird party information sources.

In certain embodiments, communications subsystem 824 may be configuredto receive data in the form of continuous data streams, which mayinclude event streams 828 of real-time events and/or event updates 830,that may be continuous or unbounded in nature with no explicit end.Examples of applications that generate continuous data may include, forexample, sensor data applications, financial tickers, networkperformance measuring tools (e.g. network monitoring and trafficmanagement applications), clickstream analysis tools, automobile trafficmonitoring, and the like.

Communications subsystem 824 may also be configured to communicate datafrom computer system 800 to other computer systems or networks. The datamay be communicated in various different forms such as structured and/orunstructured data feeds 826, event streams 828, event updates 830, andthe like to one or more databases that may be in communication with oneor more streaming data source computers coupled to computer system 800.

Computer system 800 can be one of various types, including a handheldportable device (e.g., an iPhone® cellular phone, an iPad® computingtablet, a PDA), a wearable device (e.g., a Google Glass® head mounteddisplay), a personal computer, a workstation, a mainframe, a kiosk, aserver rack, or any other data processing system. Due to theever-changing nature of computers and networks, the description ofcomputer system 800 depicted in FIG. 8 is intended only as a specificexample. Many other configurations having more or fewer components thanthe system depicted in FIG. 8 are possible. Based on the disclosure andteachings provided herein, a person of ordinary skill in the art willappreciate other ways and/or methods to implement the variousembodiments.

Although specific embodiments have been described, variousmodifications, alterations, alternative constructions, and equivalentsare possible. Embodiments are not restricted to operation within certainspecific data processing environments, but are free to operate within aplurality of data processing environments. Additionally, althoughcertain embodiments have been described using a particular series oftransactions and steps, it should be apparent to those skilled in theart that this is not intended to be limiting. Although some flowchartsdescribe operations as a sequential process, many of the operations canbe performed in parallel or concurrently. In addition, the order of theoperations may be rearranged. A process may have additional steps notincluded in the figure. Various features and aspects of theabove-described embodiments may be used individually or jointly.

Further, while certain embodiments have been described using aparticular combination of hardware and software, it should be recognizedthat other combinations of hardware and software are also possible.Certain embodiments may be implemented only in hardware, or only insoftware, or using combinations thereof. The various processes describedherein can be implemented on the same processor or different processorsin any combination.

Where devices, systems, components or modules are described as beingconfigured to perform certain operations or functions, suchconfiguration can be accomplished, for example, by designing electroniccircuits to perform the operation, by programming programmableelectronic circuits (such as microprocessors) to perform the operationsuch as by executing computer instructions or code, or processors orcores programmed to execute code or instructions stored on anon-transitory memory medium, or any combination thereof. Processes cancommunicate using a variety of techniques including but not limited toconventional techniques for inter-process communications, and differentpairs of processes may use different techniques, or the same pair ofprocesses may use different techniques at different times.

Specific details are given in this disclosure to provide a thoroughunderstanding of the embodiments. However, embodiments may be practicedwithout these specific details. For example, well-known circuits,processes, algorithms, structures, and techniques have been shownwithout unnecessary detail in order to avoid obscuring the embodiments.This description provides example embodiments only, and is not intendedto limit the scope, applicability, or configuration of otherembodiments. Rather, the preceding description of the embodiments willprovide those skilled in the art with an enabling description forimplementing various embodiments. Various changes may be made in thefunction and arrangement of elements.

The specification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense. It will, however, beevident that additions, subtractions, deletions, and other modificationsand changes may be made thereunto without departing from the broaderspirit and scope as set forth in the claims. Thus, although specificembodiments have been described, these are not intended to be limiting.Various modifications and equivalents are within the scope of thefollowing claims.

What is claimed is:
 1. A method of operating a computer-implementedchatbot system, the method comprising: receiving, by thecomputer-implemented chatbot system, an event notification from asoftware application; based on information in the event notification,outputting, in an ongoing conversation between a first chatbot of thecomputer-implemented chatbot system and a user, a prompt requesting theuser to confirm a start of a new conversation; receiving user inputcomprising an indication to start the new conversation; and starting, inthe ongoing conversation, the new conversation between the user and asecond chatbot of the computer-implemented chatbot system.
 2. The methodof claim 1, further comprising: identifying, by the computer-implementedchatbot system, the second chatbot based on an event identifier includedin the event notification.
 3. The method of claim 1, wherein thesoftware application is executed on a computer system remote from thecomputer-implemented chatbot system.
 4. The method of claim 1, furthercomprising: identifying, by the computer-implemented chatbot system, thesecond chatbot based on a communication channel through which the eventnotification was received by the computer-implemented chatbot system,the communication channel being a channel created for sendingcommunications between the second chatbot and the software application.5. The method of claim 1, further comprising: identifying, by thecomputer-implemented chatbot system, the second chatbot based on achatbot identifier included in the event notification.
 6. The method ofclaim 1, further comprising: storing a dialog flow state of the ongoingconversation to a context stack for dialog flows that are not yetterminated.
 7. The method of claim 1, further comprising: based on thereceived user input, suspending the ongoing conversation and startingthe new conversation; and outputting a second prompt to the user at anend of the new conversation, the second prompt requesting the user toconfirm whether to resume the suspended conversation.
 8. The method ofclaim 1, further comprising: identifying, by the computer-implementedchatbot system, the user based on a user identifier included in theevent notification.
 9. The method of claim 1, further comprising:determining an initial dialog flow state for the new conversation basedon a stored association between the initial dialog flow state and anevent identifier included in the event notification.
 10. The method ofclaim 1, further comprising: determining, by the computer-implementedchatbot system, a value of a variable from the event notification; andproviding, by the computer-implemented chatbot system, the value of thevariable as an input to the second chatbot, wherein a dialog flow stateof the new conversation includes an action to be performed by the secondchatbot or a message from the second chatbot to the user, and whereinthe action to be performed or the message to the user depends on thevalue of the variable.
 11. A computer system comprising: two or morechatbots, the two or more chatbots including a first chatbot and asecond chatbot; one or more processors; and a memory coupled to the oneor more processors, the memory storing a plurality of instructions that,when executed by the one or more processors, cause the one or moreprocessors to perform processing comprising: receiving an eventnotification from a software application; based on information in theevent notification, outputting, in an ongoing conversation between thefirst chatbot and a user, a prompt requesting the user to confirm astart of a new conversation; receiving user input comprising anindication to start the new conversation; and starting, in the ongoingconversation, the new conversation between the user and the secondchatbot.
 12. The computer system of claim 11, wherein the instructionsfurther cause the one or more processors to perform processingcomprising: identifying the second chatbot based on an event identifierincluded in the event notification.
 13. The computer system of claim 11,wherein the instructions further cause the one or more processors toperform processing comprising: identifying the second chatbot based on acommunication channel through which the event notification was receivedby the computer system, the communication channel being a channelcreated for sending communications between the second chatbot and thesoftware application.
 14. The computer system of claim 11, wherein theinstructions further cause the one or more processors to performprocessing comprising: identifying the second chatbot based on a chatbotidentifier included in the event notification.
 15. The computer systemof claim 11, wherein the instructions further cause the one or moreprocessors to perform processing comprising: storing a dialog flow stateof the ongoing conversation to a context stack for dialog flows that arenot yet terminated.
 16. The computer system of claim 11, wherein theinstructions further cause the one or more processors to performprocessing comprising: based on the received user input, suspending theongoing conversation and starting the new conversation; and outputting asecond prompt to the user at an end of the new conversation, the secondprompt requesting the user to confirm whether to resume the suspendedconversation.
 17. The computer system of claim 11, wherein theinstructions further cause the one or more processors to performprocessing comprising: identifying the user based on a user identifierincluded in the event notification.
 18. The computer system of claim 11,wherein the instructions further cause the one or more processors toperform processing comprising: determining an initial dialog flow statefor the new conversation based on a stored association between theinitial dialog flow state and an event identifier included in the eventnotification.
 19. The computer system of claim 11, wherein theinstructions further cause the one or more processors to performprocessing comprising: determining a value of a variable from the eventnotification; and providing the value of the variable as an input to thesecond chatbot, wherein a dialog flow state of the new conversationincludes an action to be performed by the second chatbot or a messagefrom the second chatbot to the user, and wherein the action to beperformed or the message to the user depends on the value of thevariable.
 20. A non-transitory computer-readable memory storinginstructions that, when executed by one or more processors of acomputer-implemented chatbot system, cause the one or more processors toperform processing comprising: receiving an event notification from asoftware application; based on information in the event notification,outputting, in an ongoing conversation between a first chatbot of thecomputer-implemented chatbot system and a user, a prompt requesting theuser to confirm a start of a new conversation; receiving user inputcomprising an indication to start the new conversation; and starting, inthe ongoing conversation, the new conversation between the user and asecond chatbot of the computer-implemented chatbot system.